package leetcode.BinarySearch;

public class FindPeakElement {
    /**
     * 峰值元素是指其值大于左右相邻值的元素。
     * 给定一个输入数组 nums，其中 nums[i] ≠ nums[i+1]，找到峰值元素并返回其索引。
     * 数组可能包含多个峰值，在这种情况下，返回任何一个峰值所在位置即可。
     *
     * @param nums
     * @return
     */
    public static int findPeakElement(int[] nums) {
        int i = 0, j = nums.length - 1;
        while (i < j) {
            int m = (i + j) / 2;
            if (nums[m] > nums[m + 1]) //那个大 那个方向一定存在峰值
                j = m;
            else
                i = m + 1;
        }
        return i;
    }

    public int findPeakElement1(int[] nums) {
        if (nums.length == 1)
            return 0;
        int left = 0, right = nums.length - 1;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < nums[mid + 1]) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return right;
    }

    public static void main(String[] args) {
//        int[] nums = {1, 2, 2, 3, 3, 4, 1};
        int[] nums = {1, 8, 2, 3, 4, 5, 0};
        System.out.println(findPeakElement(nums));
    }
}
